﻿using System.Data;
using DigDes.DSchool.SUPS.DataAccess.Interface;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DigDes.DSchool.SUPS.DataAccess.Database
{
    public class FileLoaderDAC
    {
        // TODO: вынести общий функционал для подобных классов доступа к БД в общий класс BaseDAC

        // Сама строка хранится в app.config (web.config) файле исполняемого файла, который дёрнет метод этой библиотеки классов.
        // В нашем случае это DigDes.DSchool.SUPS.Test.App файл App.Config.

        private static readonly string ConnectionStringKey = "SUPSDB";

        public static void AddRowInSomeTable(LoaderStringDTO row)
        {
            var connectionString = ConfigurationManager.ConnectionStrings[ConnectionStringKey].ConnectionString;
            using (var sqlConn = new SqlConnection(connectionString))
            {
                using (SqlCommand sqlCmd = new SqlCommand("InsertIntoSomeTable", sqlConn))
                {
                    sqlCmd.CommandType = CommandType.StoredProcedure;
                    sqlCmd.Parameters.AddWithValue("@CarriageNumber"    , row.CarriageNumber);
                    sqlCmd.Parameters.AddWithValue("@ContentWeight"     , row.ContentWeight);
                    sqlCmd.Parameters.AddWithValue("@DestinationStation", row.DestinationStation);
                    sqlCmd.Parameters.AddWithValue("@ContentCode"       , row.ContentCode);
                    sqlCmd.Parameters.AddWithValue("@ConsigneeСode"     , row.ConsigneeСode);
                    sqlCmd.Parameters.AddWithValue("@CarriageParkType"  , row.CarriageParkType);
                    sqlCmd.Parameters.AddWithValue("@StartStation"      , row.StartStation);
                    sqlCmd.Parameters.AddWithValue("@OperationCode"     , row.OperationCode);
                    sqlCmd.Parameters.AddWithValue("@OperationDate"     , row.OperationDate);
                    sqlCmd.Parameters.AddWithValue("@OperationYear"     , row.OperationYear);
                    sqlCmd.Parameters.AddWithValue("@OperationTime"     , row.OperationTime);
                    sqlCmd.Parameters.AddWithValue("@OperationStation"  , row.OperationStation);
                    sqlCmd.Parameters.AddWithValue("@PuttingRoad"       , row.PuttingRoad);
                    sqlCmd.Parameters.AddWithValue("@ReceptionRoad"     , row.ReceptionRoad);
                    sqlCmd.Parameters.AddWithValue("@TrainIndex"        , row.TrainIndex);
                    sqlCmd.Parameters.AddWithValue("@TrainNumber"       , row.TrainNumber);

                    sqlConn.Open();                 
                    sqlCmd.ExecuteNonQuery();
                }
            }
        }

        public static void AddAllRowsInSomeTable(IEnumerable<LoaderStringDTO> rows)
        {
            // Делается по аналогии с предыдущим методом
            //throw new NotImplementedException();
            foreach (var row in rows)
            {
                FileLoaderDAC.AddRowInSomeTable(row);
            }          
        }
    }
}
